home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / coding / dsp / c5xug.exe / INTR.ASM < prev    next >
Assembly Source File  |  1990-07-11  |  2KB  |  75 lines

  1. ;**************************************************************
  2. ;  
  3. ;                 intr.asm
  4. ;  
  5. ;                 staff
  6. ;  
  7. ;                 07-11-90
  8. ;  
  9. ;           (C) Texas Instruments Inc., 1992 
  10. ;  
  11. ;           Refer to the file 'license.txt' included with this 
  12. ;           this package for usage and license information. 
  13. ;  
  14. ;**************************************************************
  15. * Foreground Program
  16.  
  17.        .mmregs
  18.  
  19. TEMP       .set    63h           ; Temporary storage.
  20. X    .set 64h
  21. Y    .set    65h
  22. COEFF    .set 66h
  23. ;       .
  24.  ;       .
  25.   ;       .
  26.        LAR       AR1,#X      ; AR1 points to X values
  27.        LAR       AR2,#COEFF  ; AR2 points to coefficients b,a,c
  28. *                 in that order
  29.        LAR       AR3,#Y      ; AR3 points to Y results
  30.        INTR    20           ; Invoke software interrupt #20
  31.    ;       .
  32.     ;       .
  33.      ;       .
  34.  
  35. *;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  36. * This routine uses the block repeat functionality of the TMS320C50 to find
  37. * the maximum value of 16 executions of the equation Y=aX^2+bX+c.  The X values
  38. * are pointed at by AR1.  The Y results are pointed at
  39. * by AR3. The coefficients are pointed at by AR2.
  40. * At the completion of the routine, the ACC contains the maximum value.
  41. * All other registers are unaffected.
  42. *;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  43.  
  44. ISR20       LDP       #0           ; Use page 0 of data memory.
  45.        LACC    #08000h
  46.        SACB            ; Initialize AccB with min. possible value
  47.        MAR       *,AR1       ; ARP <- AR1
  48. *
  49. * Load block repeat count register with 15.
  50. *
  51.        SPLK    #0Fh,BRCR
  52. *
  53. * Repeat Block.
  54. *
  55.        RPTB    END_LOOP-1  ; For i=0;i<=15;i++.
  56.        ZAP               ; ACC = PREG = 0.
  57.        SQRA    *+,AR2      ; TREG0 = X     PREG = X^2
  58.        SPL       TEMP        ; Save X^2.
  59.        MPY       *+           ; PREG = b*X
  60.        LTA       TEMP        ; TREG = X^2    ACC = b*X
  61.        MPY       *+           ; PREG = a*X^2
  62.        APAC            ; ACC = a*X^2 + b*X
  63.        ADD       *,0,AR3     ; ACC = A*X^2 + b*X + c
  64.        SACL    *+,0,AR1    ; Save Y.
  65.        CRGT            ; Save maximum Y.
  66. END_LOOP
  67.        SACL    TEMP        ; Save the result temporarily
  68.        LACC    #RE_ENTER
  69.        PUSH            ; Push re-entry address onto stack
  70.        RETI            ; Pop all registers
  71. RE_ENTER
  72.        LACC    TEMP        ; Load ACC with the max. value
  73.        RET               ; Return to interrupted code
  74.  
  75.